The code below assumes that a PrintJob is already open. The ExportReport procedure takes three parameters: Export FileType, Export Destination, and a PromptForOptions boolean. Note that various other variables are used in the procedure which you may or may not use depending on the Export FileType and Destination specified. These are all listed below in the public variables section.
PEGetExportOptions PEExportTo PEStartPrintJob
uses CRDelphi; type TCrExportType = (Records, TabSeparated, Ascii, Dif, Csv, CharacterSeparated, TabSeparatedText, CrystalReportRPT, Excel2, Excel3, Excel4, LotusWK1, LotusWK3, LotusWKS, RTF, WordForWindows, Excel5, HTML30, HTML32ext, HTML32std, ODBCTable, PaginatedText, Excel5Extended, ReportDefinition); TCrExportDestination = (toFile, toEmailViaMapi, toEmailViaVIM, toMSExchange, toApplication); var {FileName is required for all Exporting except when going to ODBCTable} FFileName : string[255]; {Number and Date format need to be specified when going to Records, TabSeparated, Dif, Csv, CharacterSeparated} FUseRptNumberFmt : boolean; FUseRptDateFmt : boolean; {Quote and Separator need to be specified when going to CharacterSeparated} FCharSepQuote : string[1]; FCharSepSeparator : string[16]; {These four need to be specified when going to ODBCTable} FODBCSource : string; FODBCUser : string; FODBCPassword : string; FODBCTable : string; {LinesPerPage needs to be specified when going to PaginatedText} FLinesPerPage : Word; {These 5 need to be specified when going to Excel5Extended} FExcelColumnHeadings : Bool; FExcelConstColumnWidth : Bool; FExcelConstant : double; FExcelAreaCode : smallint; {A SectionCode} FExcelTabularFormat : Bool; {If Destination is toEmailViaMapi or toEmailViaVIM these must be filled in} FEmailToList : string; FEmailCCList : string; FEmailVIMBCCList : string; FEmailSubject : string; FEmailMessage : string; {If Destination is toMSExchange these must be filled in} FExchangeProfile : string; FExchangePassword : string; FExchangeFolder : string; procedure ExportReport(FileType: TCrExportType; Destination: TCrDestination; PromptForOptions: boolean); type TFormat = (DifFormat, Rec, CommaSep, CharSep, HTML, ODBCType, PagText, Xls5Ext); const UXFFormatType: array[TCrExportType] of Word =( UXFRecordType, UXFTabSeparatedType, UXFTextType, UXFDifType, UXFCommaSeparatedType, UXFCharSeparatedType, UXFTabbedTextType, UXFCrystalReportType, UXFXls2Type, UXFXls3Type, UXFXls4Type, UXFLotusWk1Type, UXFLotusWk3Type, UXFLotusWksType, UXFRichTextFormatType, UXFWordWinType, UXFXls5Type, UXFHTML3Type, UXFHTML32ExtType, UXFHTML32StdType, UXFODBCType, UXFPaginatedTextType, UXFXls5TypeExt, UXFReportDefinitionType); FormatDLL: array[TCrExportType] of string[12] = ('u2frec.dll', 'u2fsepv.dll', 'u2ftext.dll', 'u2fdif.dll', 'u2fsepv.dll', 'u2fsepv.dll', 'u2ftext.dll', 'u2fcr.dll', 'u2fxls.dll', 'u2fxls.dll', 'u2fxls.dll', 'u2fwks.dll', 'u2fwks.dll', 'u2fwks.dll', 'u2frtf.dll', 'u2fwordw.dll', 'u2fxls.dll', 'u2fhtml.dll', 'u2fhtml.dll', 'u2fhtml.dll', 'u2fodbc.dll', 'u2ftext', 'u2fxls.dll', 'u2frdef.dll'); DestinationFormat: array[TCrExportDestination] of Word = (UXDDiskType, UXDMAPIType, UXDVIMType, UXDExchFolderType, UXDApplicationType); DestinationDLL: array[TCrExportDestination] of string[12] = ('uxddisk.dll', 'uxdmapi.dll', 'uxdvim.dll', 'uxdpost.dll', 'uxdapp.dll'); var {Variables for Export: these must be in scope when StartPrintJob is called. If StartPrintJob is in another procedure, make these variables public} ExportOpt : PEExportOptions; {UXF: Format Options} UXFDif : UXFDifOptions; UXFRec : UXFRecordStyleOptions; UXFCsv : UXFCommaTabSeparatedOptions; UXFCharSep : UXFCharSeparatedOptions; UXFHTML : UXFHTML3Options; UXFODBC : UXFODBCOptions; UXFPagText : UXFPaginatedTextOptions; UXFXls5Ext : UXFXlsOptions; pFormat : Pointer; {UXD: Disk Options} UXDDisk : UXDDiskOptions; UXDMapi : UXDMapiOptions; UXDVIM : UXDVIMOptions; UXDExch : UXDPostFolderOptions; UXDApp : UXDApplicationOptions; pDisk : Pointer; {Private FormatOptions function} function FormatOptions(const Key: TFormat): Pointer; var nCode : integer; nGroup : integer; begin Result := nil; case Key of DifFormat: begin UXFDif.structSize := SizeOf(UXFDIFOptions); UXFDif.useReportNumberFormat := FUseRptNumberFmt; UXFDif.useReportDateFormat := FUseRptDateFmt; Result := @UXFDif; end; Rec: begin UXFRec.structSize := SizeOf(UXFRecordStyleOptions); UXFRec.useReportNumberFormat := FUseRptNumberFmt; UXFRec.useReportDateFormat := FUseRptDateFmt; Result := @UXFRec; end; CommaSep: begin UXFCsv.structSize := SizeOf(UXFCommaTabSeparatedOptions); UXFCsv.useReportNumberFormat := FUseRptNumberFmt; UXFCsv.useReportDateFormat := FUseRptDateFmt; Result := @UXFCsv; end; CharSep: begin UXFCharSep.structSize := SizeOf(UXFCharSeparatedOptions); UXFCharSep.useReportNumberFormat := FUseRptNumberFmt; UXFCharSep.useReportDateFormat := FUseRptDateFmt; UXFCharSep.stringDelimiter := FCharSepQuote[1]; FCharSepSeparator := FCharSepSeparator + #0; UXFCharSep.fieldDelimiter := @FCharSepSeparator[1]; Result := @UXFCharSep; end; HTML: begin UXFHTML.structSize := SizeOf(UXFHTML3Options); FFileName := FFileName + #0; UXFHTML.filename := @FFileName[1]; Result := @UXFHTML; end; ODBCType: begin UXFODBC.structsize := SizeOf(UXFODBCOptions); FODBCSource := FODBCSource + #0; UXFODBC.dataSourceName := @FODBCSource[1]; FODBCUser := FODBCUser + #0; UXFODBC.dataSourceUserID := @FODBCUser[1]; FODBCPassword := FODBCPassword + #0; UXFODBC.dataSourcePassword := @FODBCPassword[1]; FODBCTable := FODBCTable + #0; UXFODBC.exportTableName := @FODBCTable[1]; Result := @UXFODBC end; PagText: begin UXFPagText.structSize := SizeOf(UXFPaginatedTextOptions); UXFPagText.nLinesPerPage := FLinesPerPage; Result := @UXFPagText; end; Xls5Ext: begin UXFXls5Ext.structSize := SizeOf(UXFXlsOptions); UXFXls5Ext.bColumnHeadings := FExcelColumnHeadings; UXFXls5Ext.bUseConstColWidth := FExcelConstColumnWidth; UXFXls5Ext.fConstColWidth := FExcelConstant; nCode := FExcelArea; nGroup := nCode mod 25; nCode := (nCode div 1000); UXFXls5Ext.baseAreaType := nCode; UXFXls5Ext.baseAreaGroupNum := nGroup + 1; UXFXls5Ext.bTabularFormat := Bool(FExcelTabularFormat); Result := @UXFXls5Ext; end; end; end; {FormatOptions} {Private DiskOptions function} function DiskOptions(const Key : TCrExportDestination) : Pointer; begin Result := nil; case Key of {Disk} toFile : begin UXDDisk.structSize := SizeOf(UXDDiskOptions); FFileName := FFileName + #0; UXDDisk.filename := @FFileName[1]; Result := @UXDDisk; end; {MAPI} toEmailViaMapi : begin UXDMapi.structSize := SizeOf(UXDMAPIOptions); FEmailToList := FEmailToList + #0; UXDMapi.toList := @FEmailToList[1]; FEmailCCList := FEmailCCList + #0; UXDMapi.ccList := @FEmailCCList[1]; FEmailSubject := FEmailSubject + #0; UXDMapi.subject := @FEmailSubject[1]; FEmailMessage := FEmailMessage + #0; UXDMapi.lpmessage := @FEmailMessage[1]; Result := @UXDMapi; end; {VIM} toEMailViaVIM : begin UXDVIM.structSize := SizeOf(UXDVIMOptions); FEmailToList := FEmailToList + #0; UXDVIM.toList := @FEmailToList[1]; FEmailCCList := FEmailCCList + #0; UXDVIM.bccList := @FEmailCCList[1]; FEmailVIMBCCList := FEmailVIMBCCList + #0; UXDVIM.ccList := @FEmailVIMBCCList[1]; FEmailSubject := FEmailSubject + #0; UXDVIM.subject := @FEmailSubject[1]; FEmailMessage := FEmailMessage + #0; UXDVIM.lpmessage := @FEmailMessage[1]; Result := @UXDVIM; end; {Exchange} toMSExchange : begin UXDExch.structsize := SizeOf(UXDPostFolderOptions); FExchangeProfile := FExchangeProfile + #0; UXDExch.pszProfile := @FExchangeProfile[1]; FExchangePassword := FExchangePassword + #0; UXDExch.pszPassword := @FExchangePassword[1]; FExchangeFolder := FExchangeFolder + #0; UXDExch.pszFolderPath := @FExchangeFolder[1]; UXDExch.wDestType := 1011; {UXDPostDocMessage} Result := @UXDExch; end; {Application} toApplication : begin UXDApp.structSize := SizeOf(UXDApplicationOptions); FFileName := FFileName + #0; UXDApp.fileName := @FFileName[1]; Result := @UXDApp; end; end; end; {DiskOptions} {Main procedure: ExportReport} begin ExportOpt.structSize := SizeOf(PEExportOptions); {The Print Engine can prompt for Export Options if desired} if PromptForOptions then begin if not PEGetExportOptions(PrintJob, ExportOpt) then {Do Error Handler}; end else begin {Set FormatOptions} pFormat := nil; UXFCharSep.fieldDelimiter := nil; case FileType of Records : pFormat := FormatOptions(Rec); TabSeparated : pFormat := FormatOptions(CommaSep); Ascii : pFormat := nil; Dif : pFormat := FormatOptions(DifFormat); Csv : pFormat := FormatOptions(CommaSep); CharacterSeparated : pFormat := FormatOptions(CharSep); TabSeparatedText..Excel5 : pFormat := nil; HTML30..HTML32std : pFormat := FormatOptions(HTML); ODBCTable : pFormat := FormatOptions(ODBCType); PaginatedText : pFormat := FormatOptions(PagText); Excel5Extended : pFormat := FormatOptions(Xls5Ext); ReportDefinition : pFormat := nil; end; StrPCopy(@ExportOpt.formatDLLName, FormatDLL[FileType]); ExportOpt.formatType := UXFFormatType[FileType]; ExportOpt.formatOptions := pFormat; {Set DestinationOptions} pDisk := nil; if Destination = toApplication then begin StrPCopy(@ExportOpt.destinationDLLName, DestinationDLL[Destination]{uxdapp}); ExportOpt.destinationType := DestinationFormat[Destination]{UXDApplicationType}; pDisk := DiskOptions(Destination); ExportOpt.destinationOptions := pDisk; end else begin StrPCopy(@ExportOpt.destinationDLLName, DestinationDLL[Destination]); ExportOpt.destinationType := DestinationFormat[Destination]; pDisk := DiskOptions(Destination); ExportOpt.destinationOptions := pDisk; end; end; {Send the ExportOptions to the Print Engine} if not PEExportTo(PrintJob, ExportOpt) then {Do Error Handler}; {Start Exporting the Report} if not PEStartPrintJob(PrintJob, True) then {Do Error Handler}; end;
Seagate Software IMG Holdings, Inc. http://www.seagatesoftware.com Support services: http://support.seagatesoftware.com |